<!--
 * @Descripttion: 
 * @version: 
 * @Author: 尹鹏孝
 * @Date: 2021-12-17 09:25:45
 * @LastEditors: 尹鹏孝
 * @LastEditTime: 2021-12-17 09:58:52
-->
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>平衡二叉树</title>
</head>

<body>
    <script>
        // 给定一个二叉树判断是否是平衡二叉树
        // 二叉树的节点深度，指的是从根节点，到该节点的最长简单路径，的条数。
        // 二叉树的高度，从该节点到叶子节点的最简单路径边条数
        var isBalance = function (root) {
            // 递归三部曲+后序遍历，当前左子树和右子树差值为大于1就返回-1
            // 1、确定参数和返回值
            const getDepth = function (node) {
                // 2、确定终止条件
                if (node === null) {
                    return 0;
                }
                // 3、确定单层递归逻辑
                // 确定左子树高度
                let leftDepth = getDepth(node.left);
                // 确定右子树高度
                let rightDepth = getDepth(node.right);
                if (leftDepth === -1) {
                    return -1;
                }
                if (rightDepth === -1) {
                    return -1;
                }
                if (Math.abs(leftDepth - rightDepth) > 1) {
                    return -1;
                } else {
                    return 1 + Math.max(leftDepth, rightDepth);
                }
            }
            return !(getDepth(root) === -1);
        }
    </script>

</body>

</html>